import axios from 'axios'
import { getLocal, saveLocal } from './local'
import jsonbig from 'json-bigint'

const myaxios = axios.create({
  baseURL: 'http://ttapi.research.itcast.cn/',
  transformResponse: [
    function (data) {
      try {
        return jsonbig.parse(data)
      } catch {
        return JSON.parse(data)
      }
    }
  ]
})

// 创建一个新的axios来发送更新token的请求
const instanceToken = axios.create({
  baseURL: 'http://ttapi.research.itcast.cn/'
})

// 添加请求拦截器
myaxios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    if (config.needToken) {
      const token = JSON.parse(getLocal('userInfo'))
      if (token) {
        config.headers.Authorization = `Bearer ${token.token}`
      }
    }
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
myaxios.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    return response
  },
  async function (error) {
    // 对响应错误做点什么
    if (error.response.status === 401) {
      const rehreshToken = JSON.parse(getLocal('userInfo')).refresh_token
      const resToken = await instanceToken({
        url: '/app/v1_0/authorizations',
        method: 'PUT',
        headers: {
          Authorization: `Bearer ${rehreshToken}`
        }
      })
      console.log(resToken)
      var tokenObject = {
        refresh_token: rehreshToken,
        token: resToken.data.data.token
      }
      saveLocal('userInfo', JSON.stringify(tokenObject))
      const res = await myaxios(error.config)
      return res
    }
    return Promise.reject(error)
  }
)

export default myaxios
